home *** CD-ROM | disk | FTP | other *** search
/ Programming Sound Cards / Programming Sound Cards.iso / sound_52 / acted.ma < prev    next >
Text File  |  1995-01-01  |  5KB  |  260 lines

  1. #
  2. # action editor
  3. #
  4. # edit 1 action and play it back.
  5. #
  6.  
  7. @include c:\mbin\mh\wind.mh
  8. @include c:\mbin\mh\actions.mh
  9. @include c:\mbin\mh\keyctl.mh
  10.  
  11. # enable/disable loop mode - continous loop play
  12. # of action
  13. #
  14. LOOPOFF = 0
  15. LOOP    = 1
  16.  
  17. # play action once, do nothing, print action in ascii file
  18. # should add binary save/load.
  19. BREAD = 0
  20. BWRITE = 1
  21. PLAY = 2
  22. PRINT = 3
  23. ZILCH = 4  # no command
  24.  
  25. uchar loopOn[1]
  26. uchar editCom[1]
  27.  
  28. MAXACTS = 500
  29. uchar acts[MAXACTS][5]
  30.  
  31. NOCOLS = 5
  32. LSIZE = 5   # max label size
  33. FSIZE = 5   # field size 
  34.  
  35. # action window handle
  36. int actwd
  37.  
  38. riff openActionWindow()
  39.     # put up action window first so that it gets
  40.     # cursor
  41.      actwd = inputMWindow(WACTION, 0, 0, 20, NOCOLS*FSIZE+2+LSIZE, "action", 0, 0, 0, &acts)
  42. end
  43.  
  44. riff reopenActionWindow()
  45.     void closeWindow(actwd)
  46.     void openActionWindow()
  47. end
  48.  
  49. #
  50. # print out key according to keycodes
  51. #
  52. riff printKey(fd, keyvalue)
  53.  
  54.     switch(keyvalue)
  55.     case KEYC:
  56.         void fprintf(fd,"\tkey C\n")
  57.         end
  58.     case KEYDb:
  59.         void fprintf(fd,"\tkey Db\n")
  60.         end
  61.     case KEYEb:
  62.         void fprintf(fd,"\tkey Eb\n")
  63.         end
  64.     case KEYE:
  65.         void fprintf(fd,"\tkey E\n")
  66.         end
  67.     case KEYF:
  68.         void fprintf(fd,"\tkey F\n")
  69.         end
  70.     case KEYFS:
  71.         void fprintf(fd,"\tkey F#\n")
  72.         end
  73.     case KEYG:
  74.         void fprintf(fd,"\tkey G\n")
  75.         end
  76.     case KEYAb:
  77.         void fprintf(fd,"\tkey Ab\n")
  78.         end
  79.     case KEYBb:
  80.         void fprintf(fd,"\tkey Bb\n")
  81.         end
  82.     case KEYB:
  83.         void fprintf(fd,"\tkey B\n")
  84.         end
  85.     end
  86. end
  87. # print contents of action to file
  88. # as Ravel action code.
  89. #
  90. riff asciiAction(matrix a)
  91.     int fd
  92.     int index
  93.     int curop
  94.     int bval
  95.  
  96.     fd = open("newact.ma",3)  # create mode
  97.     void fprintf(fd,"action new = {\n")
  98.     void printf("writing ASCII action file") 
  99.     index = 0
  100.     for(;;)
  101.  
  102.         curop = a[index][0]
  103.         if (curop == 0)  
  104.             break
  105.         end
  106.         switch(curop)
  107.         case KEYACT:
  108.             void printKey(fd, a[index][1])
  109.             end
  110.  
  111.         case PATCHACT:
  112.             void fprintf(fd,"\tpatch %d\n",a[index][1])
  113.             end
  114.         case CCONTACT:
  115.             void fprintf(fd,"\tccont %t %d %d\n",a[index][1],a[index][2],a[index][3])
  116.             end
  117.         # needs checking; it may be backwards
  118.         case BENDACT:
  119.             bval = {a[index][3] << 7} | a[index][2]
  120.             void fprintf(fd,"\tbend %t %d\n",a[index][1],bval)
  121.             end
  122.         case NOTEACT:
  123.             void fprintf(fd,"\tnote %n %t %v\n",a[index][1],a[index][2],a[index][3])
  124.             end
  125.         case NOTEDACT:
  126.             void fprintf(fd,"\tnote %n %t,%t %v\n",a[index][1],a[index][2],a[index][3],a[index][4])
  127.             end
  128.         case RESTACT:
  129.             void fprintf(fd,"\trest %t \n",a[index][1])
  130.             end
  131.         case TIEACT:
  132.             void fprintf(fd,"\ttie %t \n",a[index][1])
  133.             end
  134.         case METROACT:
  135.             void fprintf(fd,"\tmetro %d \n",a[index][1])
  136.             end
  137.         case UPTEMPOACT:
  138.             void fprintf(fd,"\tuptempo %d \n",a[index][1])
  139.             end
  140.         case DOWNTEMPOACT:
  141.             void fprintf(fd,"\tdowntempo %d \n",a[index][1])
  142.             end
  143.         case DXPARAMACT:
  144.             void fprintf(fd,"\tdxparam %d %d %d %d\n",a[index][1],a[index][2],a[index][3],a[index][4])
  145.             end
  146.         end
  147.         index++
  148.     end
  149.     void fprintf(fd,"}\n")
  150.     void close(fd)
  151. end
  152.  
  153.  
  154. # default string name of action file
  155. uchar actfile[20]={
  156. 'a','c','t','.','a',0
  157. }
  158.  
  159. # write action array out as binary file
  160. riff writeBinary()
  161.     int fd
  162.  
  163.     # open the file
  164.     fd = open(&actfile, 3)
  165.     # write the acts array
  166.     void printf("writing action file...")
  167.     void write(fd, &acts[0], MAXACTS * 5)
  168.     void close(fd)
  169. end
  170.  
  171. # read action array back in as binary file and
  172. # update display
  173. riff readBinary()
  174.     int fd
  175.     int count
  176.  
  177.     fd = open(&actfile, 0)
  178.     void read(fd, &acts[0], MAXACTS * 5)
  179.     void close(fd)
  180.     void reopenActionWindow()
  181. end
  182.  
  183.  
  184. riff openWindows()
  185.     int wd
  186.  
  187.     void openActionWindow()
  188.     # define window for edit/play commands
  189.     wd = inputWindow(WDEFINE, 9, 40, 12, 50, "loop", 2, 0, 0, &loopOn)
  190.     void windowLabel(wd, "off", 0)
  191.     void windowLabel(wd, "loop", 1)
  192.     wd = inputWindow(WDEFINE, 13, 40, 18, 50, "command", 4, 0, 0, &editCom)
  193.     void windowLabel(wd, "bread", 0)
  194.     void windowLabel(wd, "bwrite", 1)
  195.     void windowLabel(wd, "play", 2)
  196.     void windowLabel(wd, "print", 3)
  197.     # voicelist and rcc windows
  198.     void mosWindow(WVCO,5,40)
  199.     void mosWindow(WRCC,0,40)
  200.     # debug window
  201.     void outputWindow(WDEBUG,19,40,23,79,"printf") # halfway
  202.     wd = inputWindow(WSTRING, 21, 0, 0, 0, "enter actfile ", 1, 1, 19, &actfile)
  203. end
  204.  
  205.  
  206. # work from edit/play DEFINE carrying out commands.
  207. #
  208.  
  209. vco actedit()
  210.     void openWindows()
  211.  
  212.     # poll for command change
  213.     editCom[0] = ZILCH
  214.     for(;;)
  215.         switch(editCom[0])
  216.         case PLAY:
  217.             void doAction(&acts[0],0)
  218.             editCom[0] = ZILCH
  219.             end
  220.         case PRINT:
  221.             void asciiAction(&acts)
  222.             editCom[0] = ZILCH
  223.             end
  224.         case BREAD:
  225.             void readBinary()
  226.             editCom[0] = ZILCH
  227.             end
  228.         case BWRITE:
  229.             void writeBinary()
  230.             editCom[0] = ZILCH
  231.             end
  232.         end
  233.         rest 1
  234.     end
  235. end
  236.  
  237. # play action in LOOP mode
  238. vco playit
  239.     int lastCom
  240.     int doit
  241.     loopOn[0] = LOOPOFF
  242.     lastCom   = LOOPOFF
  243.     doit = 0
  244.     for(;;)
  245.         if (loopOn[0] != lastCom)
  246.             lastCom = loopOn[0]
  247.             if (loopOn[0] == LOOPOFF)
  248.                 doit = 0
  249.             else
  250.                 doit = 1
  251.             end
  252.         end
  253.         if (doit)
  254.             void doAction(&acts[0],0)
  255.         end
  256.         rest    1
  257.     end
  258. end
  259.  
  260.